<?php

namespace App\Models\Category;

use App\Models\Product;
use App\Models\ProductCate;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Jedrzej\Pimpable\PimpableTrait;

class Category extends Model
{
    use HasFactory;
    use PimpableTrait;
    use SoftDeletes;

    /**
     * 排除掉不可批量赋值的属性
     * @var array
     */
    protected $guarded = [];

    /**
     * 查询字段模式
     *
     *  nickname => '%field%' 模糊查询
     *  created_at= (ge)field
     * @var array
     */
    public $searchableModels = [
        'nickname' => '%field%'
    ];

    /**
     * 可搜索字段
     */
    public $searchable = [
        'nickname',
        'top_id',
        'status'
    ];

    /**
     * 强制转换的属性
     *
     * @var array
     */
    protected $casts = [
        'value' => 'array'
    ];

    /**
     * 可排序字段
     */
    public $sortable = ['id','sort','weigh'];

    /**
     * 默认排序字段
     */
    protected $defaultSortCriteria = ['id,desc'];

    /**
     * 关联本表中的所有子类
     */
    public function children()
    {
        return $this->hasMany(Category::class, 'pid', 'id');
    }

    /**
     * 通过中间表关联商品
     */
    function product(){
        return $this->hasManyThrough(
            Product::class,//最终关联的模型
            ProductCate::class,//中间模型
            'category_id',// 中间模型和本模型关联的键
            'id',// 最终关联模型的外键
            'id',// 本模型和中间模型关联的键
            'product_id'// 中间表和最终模型关联的一个键
        );
    }
}
